/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import componenten.Database;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @author daveronvanderham
 */
public class Masterclass {

    private int masterclass_id;
    private int master;
    private String datum;
    private String tijd;
    private int min_rating;
    private int min_deelnemers;
    private double inleggeld;
    private String locatie_postcode;
    private String locatie_huisnummer;
    private String status;
    private ArrayList bericht;
    private boolean gevalideerd;

    public Masterclass() {
        this.datum = "yyyy-mm-dd";
        this.tijd = "00:00";
        this.min_rating = 0;
        this.min_deelnemers = 0;
        this.inleggeld = 0.00;
        this.locatie_postcode = "";
        this.locatie_huisnummer = "";
        this.status = "";

        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    public Masterclass(String id) {
        String sql = "SELECT * FROM masterclass WHERE masterclass_id = '" + id + "'";
        System.out.print(sql);
        try {
            ResultSet result = Database.executeSelectQuery(sql);
            result.next();
            this.masterclass_id = result.getInt("masterclass_id");
            this.datum = result.getString("masterclass_datum");
            this.master = result.getInt("master_id");
            this.tijd = result.getString("masterclass_tijd");
            this.inleggeld = result.getDouble("masterclass_inleggeld");
            this.min_rating = result.getInt("masterclass_min_rating");
            this.min_deelnemers = result.getInt("masterclass_min_deelnemers");
            this.locatie_postcode = result.getString("locatie_postcode");
            this.locatie_huisnummer = result.getString("locatie_huisnummer");
            this.status = result.getString("status");

        } catch (SQLException e) {
            System.out.print(e);
        }

        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    private void valideren() {

        if ("yyyy-mm-dd".equals(this.getDatum())) {
            this.getBericht().add("datum is verplicht");
            this.setGevalideerd(false);
        }
        if ("00:00".equals(this.getTijd())) {
            this.getBericht().add("tijd is verplicht");
            this.setGevalideerd(false);
        }
        if (this.getMin_rating() == 0) {
            this.getBericht().add("Minimale rating is verplicht");
            this.setGevalideerd(false);
        }

        if (this.getMin_deelnemers() == 0) {
            this.getBericht().add("Minimale aantal deelnemers is verplicht");
            this.setGevalideerd(false);
        }
        if (this.getInleggeld() == 0.00) {
            this.getBericht().add("Inleggeld is verplicht");
            this.setGevalideerd(false);
        }
        if ("".equals(this.getLocatie_huisnummer())) {
            this.getBericht().add("huisnummer is verplicht");
            this.setGevalideerd(false);
        }
        if ("".equals(this.getLocatie_postcode())) {
            this.getBericht().add("postcode is verplicht");
            this.setGevalideerd(false);
        }

        if (!this.datum.matches("^[0-9]{4}-[0-9]{2}-[0-9]{2}$")) {
            this.getBericht().add("datum moet yyyy-mm-dd zijn");
            this.setGevalideerd(false);
        }
        if (!this.tijd.matches("^[0-2][0-9]:[0-5][0-9]$")) {
            this.getBericht().add("tijd moet 00:00 zijn");
            this.setGevalideerd(false);
        }

        if (!this.locatie_postcode.matches("[0-9]{4}[A-Z]{2}")) {
            this.getBericht().add("postcode klopt niet");
            this.setGevalideerd(false);
        }
        if (!locatie_huisnummer.matches("^([0-9]{1,}+([A-Za-z]+)?)$")) {
            this.getBericht().add("huisnummer klopt niet");
            this.setGevalideerd(false);
        }
    }

    public boolean toevoegen() {
        this.valideren();
        if (this.isGevalideerd()) {

            //sla persoon op in de database, mbv  Database.executeInsert
            //de code sla je niet op, die wordt automatisch gegenereerd
            String sqlQuery = "Insert into masterclass( masterclass_datum, masterclass_tijd, masterclass_min_rating, masterclass_min_deelnemers, masterclass_inleggeld, master_id, locatie_postcode, locatie_huisnummer, status) values('"
                    + getDatum() + "','"
                    + getTijd() + "',"
                    + getMin_rating() + ","
                    + getMin_deelnemers() + ","
                    + getInleggeld() + ","
                    + getMaster() + ",'"
                    + getLocatie_postcode() + "', '"
                    + getLocatie_huisnummer() + "','"
                    + getStatus() + "')";
            System.out.println(sqlQuery);
            //verkorte if ... else constructie met ? en :
            if (Database.executeInsertQuery(sqlQuery) != 1) {    
                this.getBericht().add("Er is een fout onstaan tijdens het opslaan probeer opnieuw (masterclass)");
                this.setGevalideerd(false);
            }
        }
        return this.isGevalideerd();
    }

    public boolean bijwerken() {

        boolean successful = false;

        //sla persoon op in de database, mbv  Database.executeInsert
        //de code sla je niet op, die wordt automatisch gegenereerd
        String query = "UPDATE masterclass SET"
                + " status ='" + getStatus() + "' WHERE masterclass_id = " + getMasterclass_id() + "";

        //verkorte if ... else constructie met ? en :
        if (Database.executeUpdateQuery(query) == 1) { //tenminste 1 record inserted
            successful = true;
        }

        return successful;
    }

    public int getMaster() {
        return master;
    }

    /**
     * @param master the master to set
     */
    public void setMaster(String master) {
        try {
            String query = "SELECT persoon_id FROM master where master_bijnaam = '" + master + "'";
            ResultSet resultaat = Database.executeSelectQuery(query);
            resultaat.next();
            int id = resultaat.getInt("persoon_id");
            this.master = id;
        } catch (Exception e) {
        }
    }

    public String getMasterBijnaam(int master) {
        String master_bijnaam = "";
        try {
            String query = "SELECT master_bijnaam FROM master where persoon_id = " + master + "";
            ResultSet rs = Database.executeSelectQuery(query);
            rs.next();
            master_bijnaam = rs.getString("master_bijnaam");
        } catch (Exception e) {
        }
        return master_bijnaam;
    }

    /**
     * @return the datum
     */
    public String getDatum() {
        return datum;
    }

    /**
     * @param datum the datum to set
     */
    public void setDatum(String datum) {
        this.datum = datum;

    }

    /**
     * @return the tijd
     */
    public String getTijd() {

        return tijd;
    }

    /**
     * @param tijd the tijd to set
     */
    public void setTijd(String tijd) {

        this.tijd = tijd;
    }

    /**
     * @return the min_rating
     */
    public int getMin_rating() {
        return min_rating;
    }

    /**
     * @param min_rating the min_rating to set
     */
    public void setMin_rating(String min_rating) {
        try {
            this.min_rating = Integer.parseInt(min_rating);
        } catch (NumberFormatException e) {
            this.setGevalideerd(false);
            this.getBericht().add("Voer een geldig nummer in allen gehele getallen boven de 0" + e.getMessage());
        }
    }

    /**
     * @return the min_deelnemers
     */
    public int getMin_deelnemers() {
        return min_deelnemers;
    }

    /**
     * @param min_deelnemers the min_deelnemers to set
     */
    public void setMin_deelnemers(String min_deelnemers) {
        try {
            this.min_deelnemers = Integer.parseInt(min_deelnemers);
        } catch (NumberFormatException e) {
            this.setGevalideerd(false);
            this.getBericht().add("Voer een geldig nummer in allen gehele getallen boven de 0" + e.getMessage());
        }
    }

    /**
     * @return the inleggeld
     */
    public double getInleggeld() {
        return inleggeld;
    }

    /**
     * @param inleggeld the inleggeld to set
     */
    public void setInleggeld(String inleggeld) {
        try {
            this.inleggeld = Double.parseDouble(inleggeld);
        } catch (NumberFormatException e) {
            this.setGevalideerd(false);
            this.getBericht().add("Voer een geldig nummer in allen gehele getallen boven de 0" + e.getMessage());
        }
    }

    /**
     * @return the lokatie_postcode
     */
    public String getLocatie_postcode() {
        return locatie_postcode;
    }

    /**
     * @param lokatie_postcode the lokatie_postcode to set
     */
    public void setLocatie_postcode(String lokatie_postcode) {
        this.locatie_postcode = lokatie_postcode;
    }

    /**
     * @return the locatie_huisnummer
     */
    public String getLocatie_huisnummer() {
        return locatie_huisnummer;
    }

    /**
     * @param locatie_huisnummer the locatie_huisnummer to set
     */
    public void setLocatie_huisnummer(String locatie_huisnummer) {
        this.locatie_huisnummer = locatie_huisnummer;
    }

    /**
     * @return the masterclass_id
     */
    public int getMasterclass_id() {
        return masterclass_id;
    }

    /**
     * @param masterclass_id the masterclass_id to set
     */
    public void setMasterclass_id(int masterclass_id) {
        this.masterclass_id = masterclass_id;
    }

    /**
     * @return the status
     */
    public String getStatus() {
        return status;
    }

    /**
     * @param status the status to set
     */
    public void setStatus(String status) {
        this.status = status;
    }

    public String[] getInformatie() {
        return new String[]{this.getMasterBijnaam(this.master), this.datum, this.tijd, "" + this.masterclass_id};
    }

    /**
     * @return the bericht
     */
    public ArrayList getBericht() {
        return bericht;
    }

    /**
     * @param bericht the bericht to set
     */
    public void setBericht(ArrayList bericht) {
        this.bericht = bericht;
    }

    /**
     * @return the gevalideerd
     */
    public boolean isGevalideerd() {
        return gevalideerd;
    }

    /**
     * @param gevalideerd the gevalideerd to set
     */
    public void setGevalideerd(boolean gevalideerd) {
        this.gevalideerd = gevalideerd;
    }

    public void resetBericht() {
        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }
}